/**
* Copyright (c) By zengqh.
*
* This program is just for fun or demo, in the hope that it  
* will be useful, you can redistribute it and/or modify freely.
*
* Time: 2013/04/01
* File: ForDirectionalLightingPass.h
* Blog: http://www.cnblogs.com/zengqh/
**/

#pragma once

#include "../SceneRenderPass.h"

namespace HY
{
class ForDirectionalLightingPass : public SceneRenderPass
{
public:
	enum
	{
		TransparentPass 			= 1<<1,	/** This is a transparent render pass */
		NoZWrite        			= 1<<2,	/** Do not write z-values */
		NoDiffuseMap    			= 1<<3,	/** Ignore diffuse map */
		NoLighting      			= 1<<4,	/** Do not perform lighting by using the first found directional light source */
		NoGammaCorrection			= 1<<5,
		NoAmbientOcclusionMap		= 1<<6,
		NoLightMap					= 1<<7,
		NoEmissiveMap				= 1<<8,
		NoFresnelReflection			= 1<<9,
		NoReflectivityMap			= 1<<10,
		NoReflectionMap				= 1<<11,
		NoNormalMap					= 1<<12,
		NoDetailNormalMap			= 1<<13,
		NoParallaxMapping			= 1<<14,
		NoSpecular					= 1<<15,
		NoSpecularMap				= 1<<16,
		NoDiffuseRampMap			= 1<<17,
		NoSpecularRampMap			= 1<<18,
		NoEdgeRampMap				= 1<<19,
		NoGlow						= 1<<20,
		NoGlowMap					= 1<<21,
		NoDOF						- 1<<22
	};

	virtual void render(const RenderableList& render_list);

protected:
	ForDirectionalLightingPass(RenderSystem* render_sys);
	virtual ~ForDirectionalLightingPass();

protected:
	Vector3			light_dir_;
	Vector3			light_clr_;
	bool			glow_enabled_;
	float			dof_near_blur_depth_;
	float			dof_focal_plane_depth_;
	float			dof_far_blur_depth_;
	float			dof_blur_cut_off_;
	ProgramGen*		pro_gen_;

};
}